import { defineStore } from 'pinia';
import { computed, ref } from 'vue'
import { Note } from '@/types/note'

/**
 * 记事本信息
 */
export const useNoteStore = defineStore('note', () => {
	/** 记事本列表 */
	const noteList = ref<Note[]>([])

	/**
	 * 添加笔记
	 * @param note 笔记对象
	 */
	const addNote = (note: Note) => {
		noteList.value.push(note)
	}

	/**
	 * 根据 ID 获取笔记
	 * @param id 笔记 ID
	 * @returns 笔记对象（找不到时返回空对象）
	 */
	const getNoteById = (id: string): Note => {
		const note = noteList.value.find(note => note.id === id)
		return note ?? {
			id: '',
			type: 'work',
			title: '',
			content: ''
		}
	}

	/**
	 * 更新笔记
	 * @param updatedNote 更新后的笔记对象
	 */
	const updateNote = (updatedNote: Note) => {
		const index = noteList.value.findIndex(note => note.id === updatedNote.id)
		if (index !== -1) {
			noteList.value[index] = { ...updatedNote }
		}
	}

	/**
	 * 删除笔记
	 * @param id 要删除的笔记 ID
	 */
	const deleteNote = (id: string) => {
		noteList.value = noteList.value.filter(note => note.id !== id)
	}
	
	/**
	 * 导入笔记
	 * @param notes 要导入的笔记数组
	 * @param append 是否追加（默认 false 覆盖）
	 */
	const importNotes = (notes: Note[], append = false) => {
		if (!Array.isArray(notes)) return;
		if (append) {
			// 追加到现有列表
			noteList.value.push(...notes);
		} else {
			// 覆盖原列表
			noteList.value = notes;
		}
	};


	/** 工作类笔记列表（type === 'work'） */
	const workNotes = computed(() => noteList.value.filter(note => note.type === 'work'))

	/** 生活类笔记列表（type === 'live'） */
	const liveNotes = computed(() => noteList.value.filter(note => note.type === 'live'))

	return {
		/** 记事本列表 */
		noteList,

		/** 添加笔记 */
		addNote,

		/** 根据 ID 获取笔记 */
		getNoteById,

		/** 更新笔记 */
		updateNote,

		/** 删除笔记 */
		deleteNote,
		
		/** 导入笔记*/
		importNotes,

		/** 工作类笔记 */
		workNotes,

		/** 生活类笔记 */
		liveNotes
		
	}
}, {
	/** 持久化配置 */
	persist: {
		storage: {
			/**
			 * 设置缓存
			 */
			setItem(key, value) {
				uni.setStorageSync(key, value)
			},
			/**
			 * 获取缓存
			 */
			getItem(key) {
				return uni.getStorageSync(key)
			},
		},
	}
})
